﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using BasicForms;
using Lists;
using GeneralLibs;
using Excel = Microsoft.Office.Interop.Excel;
using System.Collections;
using MuaHang.CongCuDatHang;

namespace ReportGenerators.QuanLyKho.ThongKeNhapXuatTon
{
    public partial class FrmThongKeNhapXuatTonLietKeToanBoCacKho : BasicForms.FrmSupportPrintableComponents
    {
        public FrmThongKeNhapXuatTonLietKeToanBoCacKho()
        {
            InitializeComponent();
        }

        public void InitGridColumns(DanhMucKho listKho)
        {
            //Claer all old column
            gridControl.DataSource = null;
            gridView.Columns.Clear();

            int soLuongKho = listKho.Count;
            int soCot = 0;
            //Hiện chỉ dùng cho VietBook
            if (DanhMucStore.Instance.CurrentStore().Ten.ToUpper().Contains("VIETBOOK"))
                soCot = soLuongKho + 4 + 1; //số lượng Kho có trong CSDL + 4 cột phái trên: mã, tên, giá bán lẻ, số lượng đặt + 1 cột tổng tồn phía cuối
            else
                soCot = soLuongKho + 3 + 1; //số lượng Kho có trong CSDL + 3 cột phái trên: mã, tên, giá bán lẻ + 1 cột tổng tồn phía cuối

            DevExpress.XtraGrid.Columns.GridColumn colMa = new DevExpress.XtraGrid.Columns.GridColumn();
            colMa.Caption = "Mã";
            colMa.FieldName = "Ma";
            colMa.Name = "colMa";
            colMa.Visible = true;
            colMa.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            colMa.Width = 100;
            colMa.VisibleIndex = 0;

            DevExpress.XtraGrid.Columns.GridColumn colTen = new DevExpress.XtraGrid.Columns.GridColumn();
            colTen.Caption = "Tên";
            colTen.FieldName = "Ten";
            colTen.Name = "colTen";
            colTen.Visible = true;
            colTen.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            colTen.Width = 250;
            colTen.VisibleIndex = 1;

            DevExpress.XtraGrid.Columns.GridColumn colGiaBia = new DevExpress.XtraGrid.Columns.GridColumn();
            colGiaBia.Caption = "Giá bán lẻ";
            colGiaBia.FieldName = "GiaBia";
            colGiaBia.Name = "colGiaBia";
            colGiaBia.Visible = true;
            colGiaBia.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            colGiaBia.Width = 100;
            colGiaBia.VisibleIndex = 2;

            DevExpress.XtraGrid.Columns.GridColumn colSoLuongDat = new DevExpress.XtraGrid.Columns.GridColumn();
            colSoLuongDat.Caption = "Số lượng đặt";
            colSoLuongDat.FieldName = "SoLuongDat";
            colSoLuongDat.Name = "colSoLuongDat";
            colSoLuongDat.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            colSoLuongDat.Width = 70;
            if (DanhMucStore.Instance.CurrentStore().Ten.ToUpper().Contains("VIETBOOK"))
            {
                colSoLuongDat.VisibleIndex = 3;
                colSoLuongDat.Visible = true;
            }
            else
            {
                colSoLuongDat.Visible = false;
            }

            DevExpress.XtraGrid.Columns.GridColumn colTongTon = new DevExpress.XtraGrid.Columns.GridColumn();
            colTongTon.Caption = "Tổng tồn";
            colTongTon.FieldName = "TongTon";
            colTongTon.Name = "colTongTon";
            colTongTon.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            colTongTon.VisibleIndex = soCot - 1;
            //Vẫn khai báo cột tổng tồn nhưng nếu không xem tất các kho thì không tính số liệu và không hiện
            if (listKho.Count == DanhMucKho.Instance.DataTable.Rows.Count)
                colTongTon.Visible = true;
            else
                colTongTon.Visible = false;

            colGiaBia.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
            colGiaBia.DisplayFormat.FormatString = GeneralLibs.LocalSettings.HeThong.NumbericFormatString;
            colTongTon.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
            colTongTon.DisplayFormat.FormatString = GeneralLibs.LocalSettings.HeThong.NumbericFormatString;

            DevExpress.XtraGrid.Columns.GridColumn[] cols = new DevExpress.XtraGrid.Columns.GridColumn[soCot];

            cols[0] = colMa;
            cols[1] = colTen;
            cols[2] = colGiaBia;
            cols[soCot - 1] = colTongTon;  //cột cuối cùng

            int indexVisible = 3; //Bắt đầu add cột từ 3, nếu là các nơi bình thường
            if (DanhMucStore.Instance.CurrentStore().Ten.ToUpper().Contains("VIETBOOK")) //nếu là VietBook thì là 4
            {
                cols[3] = colSoLuongDat;
                indexVisible = 4;
            }
            foreach (Kho kho in listKho)
            {
                cols[indexVisible] = new DevExpress.XtraGrid.Columns.GridColumn();
                cols[indexVisible].Caption = kho.Ten;
                cols[indexVisible].FieldName = "Kho" + kho.STT;  //VD Kho1, Kho2
                cols[indexVisible].Name = "col" + kho.Ma;
                cols[indexVisible].Visible = true;
                cols[indexVisible].VisibleIndex = indexVisible;
                cols[indexVisible].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;

                //Format hiển thị
                cols[indexVisible].DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;
                cols[indexVisible].DisplayFormat.FormatString = GeneralLibs.LocalSettings.HeThong.NumbericFormatString;

                indexVisible++;
            }

            this.gridView.Columns.AddRange(cols);

            //Chỉ cho cột số lượng đặt sửa được
            foreach (DevExpress.XtraGrid.Columns.GridColumn item in gridView.Columns)
            {
                if (item.Name == "colSoLuongDat")
                    item.OptionsColumn.AllowEdit = true;
                else
                    item.OptionsColumn.AllowEdit = false;
            }

            FormatNumberInGridView(gridView);
        }

        private void FrmThongKeNhapXuatTon_Load(object sender, EventArgs e)
        {
            if (DesignMode) return;
            try
            {
                //Xem báo cáo này luôn chỉ hiện tồn đến ngày nào thôi, không cho phép chỉnh kỳ
                cmbKyBaoCao.SelectedIndex = 19;
                cmbKyBaoCao.Enabled = false;
                dtNgayBatDau.Enabled = false;

                cmbNhomVatTuHangHoa.DataSource = DanhMucNhomVatTuHangHoa.Instance.DataView;
                cmbNhomVatTuHangHoa.DisplayColumn = "Ten";
                cmbNhomVatTuHangHoa.ValueColumn = "ID";
                cmbNhomVatTuHangHoa.AddVisibleColumn("Ma", "Mã");
                cmbNhomVatTuHangHoa.AddVisibleColumn("Ten", "Tên");

                #region cmbNCC
                cmbNCC.DataSource = DanhMucDoiTuongNghiepVu.Instance.DataView;
                cmbNCC.DisplayColumn = "Ten";
                cmbNCC.ValueColumn = "ID";
                cmbNCC.AddVisibleColumn("Ma", "Mã");
                cmbNCC.AddVisibleColumn("Ten", "Tên");
                cmbNCC.EditValue = Guid.Empty;
                #endregion

                dsThongKeNhapXuatTon.VatTuHangHoa.Merge(DanhMucVatTuHangHoa.GetDanhMucHangHoaDangSuDung().DataView.ToTable());  //Chỉ lấy những hàng TrangThai=1.
                dsThongKeNhapXuatTon.Kho.Merge(DanhMucKho.Instance.DataTable);
                gridControlKho.DataSource = dsThongKeNhapXuatTon.Kho;

                //Hiện chỉ dùng cho VietBook
                if (DanhMucStore.Instance.CurrentStore().Ten.ToUpper().Contains("VIETBOOK"))
                {
                    btnSinhPhieuDatHang.Visible = true;
                    colSLDat.Visible = true;
                }
                else
                {
                    btnSinhPhieuDatHang.Visible = false;
                    colSLDat.Visible = false;
                }
            }
            catch (Exception ex)
            {
            }

            try
            {
                foreach (DevExpress.XtraGrid.Columns.GridColumn column in gridViewDsVatTuHangHoa.Columns)
                {
                    column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;
                }
                foreach (DevExpress.XtraGrid.Columns.GridColumn column in gridViewKho.Columns)
                {
                    column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;
                }
                foreach (DevExpress.XtraGrid.Columns.GridColumn column in gridView.Columns)
                {
                    column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;
                }
                //chkChooseAllVatTuHangHoa.Checked = false;
                //chkChosseAllKho.Checked = false;
                FormatNumberInGridView(gridViewDsVatTuHangHoa);
                FormatNumberInGridView(gridViewKho);
                FormatNumberInGridView(gridView);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void chkChooseAllVatTuHangHoa_CheckedChanged(object sender, EventArgs e)
        {
            foreach (DataRow row in dsThongKeNhapXuatTon.VatTuHangHoa.Rows)
            {
                row["Choose"] = chkChooseAllVatTuHangHoa.Checked;
            }
        }
        private void chkChosseAllKho_CheckedChanged(object sender, EventArgs e)
        {
            foreach (DataRow row in dsThongKeNhapXuatTon.Kho.Rows)
            {
                row["Choose"] = chkChosseAllKho.Checked;
            }
        }

        private void cmbNhomVatTuHangHoa_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete) cmbNhomVatTuHangHoa.EditValue = Guid.Empty;
        }
        private void cmbNhomVatTuHangHoa_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbNhomVatTuHangHoa.EditValue is Guid && (Guid)cmbNhomVatTuHangHoa.EditValue != Guid.Empty)
                {
                    //Dieu kien loc la ID = cmbNhomVatTuHangHoa.EditValue + ID cac nhom con.
                    string filterNhomCon = "CONVERT('{" + cmbNhomVatTuHangHoa.EditValue.ToString() + "}','System.Guid'), ";
                    DanhMucNhomVatTuHangHoa cacNhomCon = DanhMucNhomVatTuHangHoa.Instance.GetNhomVatTuHangHoaCon((Guid)cmbNhomVatTuHangHoa.EditValue);
                    foreach (NhomVatTuHangHoa nhomCon in cacNhomCon)
                    {
                        filterNhomCon += "CONVERT('{" + nhomCon.ID + "}','System.Guid'), ";
                        //filterNhomCon += string.Format(", '{0}'", nhomCon.ID);
                    }
                    if (filterNhomCon.EndsWith(", ")) filterNhomCon = filterNhomCon.Remove(filterNhomCon.Length - 2);

                    dsThongKeNhapXuatTon.VatTuHangHoa.Clear();
                    string filter = string.Format("NhomVatTuHangHoaID IN ({0}) AND TrangThai = 1 ", filterNhomCon);
                    dsThongKeNhapXuatTon.VatTuHangHoa.Merge(DanhMucVatTuHangHoa.Filter(filter).DataView.ToTable());
                }
                else
                {
                    dsThongKeNhapXuatTon.VatTuHangHoa.Clear();
                    dsThongKeNhapXuatTon.VatTuHangHoa.Merge(DanhMucVatTuHangHoa.GetDanhMucHangHoaDangSuDung().DataView.ToTable());
                }
                chkChooseAllVatTuHangHoa.Checked = false;
                chkChooseAllVatTuHangHoa.Checked = true;
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void cmbNCC_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete) cmbNCC.EditValue = Guid.Empty;
        }
        private void cmbNCC_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbNCC.EditValue is Guid && (Guid)cmbNCC.EditValue != Guid.Empty)
                {
                    dsThongKeNhapXuatTon.VatTuHangHoa.Clear();
                    dsThongKeNhapXuatTon.VatTuHangHoa.Merge(DanhMucVatTuHangHoa.GetDanhMucHangMuaTuNhaCungCap((Guid)cmbNCC.EditValue));
                    chkChooseAllVatTuHangHoa.Checked = false;
                    chkChooseAllVatTuHangHoa.Checked = true;
                }
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private DataTable GetHangDaCoGiaoDich(SqlCommand cmd, Guid selectedKhoID, DateTime ngayKetThuc)
        {
            try
            {
                ThoiDiemKhoaSo thoiDiemKhoaSo = DanhMucThoiDiemKhoaSo.Instance.GetThoiDiemChotSoDuGanNhat(ngayKetThuc);
                if (selectedKhoID != null && selectedKhoID != Guid.Empty)
                {
                    cmd.CommandText = string.Format("SELECT DISTINCT VatTuHangHoaID, KhoID \n" +
                                                    "FROM NhatKyKho \n" +
                                                    "WHERE  KhoID = @KhoID AND @ThoiDiemDau <= Ngay AND Ngay <= @ThoiDiemCuoi \n" +
                                                    "   AND VatTuHangHoaID is not null  \n" +
                                                    "UNION \n" +
                                                    "SELECT DISTINCT VatTuHangHoaID, KhoID \n" +
                                                    "FROM TonKho \n " +
                                                    "WHERE KhoID = @KhoID AND SoLuong <> 0 \n" +
                                                    "   AND VatTuHangHoaID is NOT NULL");
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("KhoID", selectedKhoID);
                    cmd.Parameters.AddWithValue("ThoiDiemDau", thoiDiemKhoaSo.ThoiDiem);
                    cmd.Parameters.AddWithValue("ThoiDiemCuoi", ngayKetThuc);
                }
                else
                {
                    cmd.CommandText = string.Format("SELECT DISTINCT VatTuHangHoaID \n" +
                                                   "FROM NhatKyKho \n" +
                                                   "WHERE  @ThoiDiemDau <= Ngay AND Ngay <= @ThoiDiemCuoi  \n" +
                                                   "	AND VatTuHangHoaID is NOT NULL \n" +
                                                   "UNION \n" +
                                                   "SELECT DISTINCT VatTuHangHoaID  \n" +
                                                   "FROM TonKho  \n" +
                                                   "WHERE SoLuong <> 0 \n" +
                                                   "	AND VatTuHangHoaID is NOT NULL ");

                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("ThoiDiemDau", thoiDiemKhoaSo.ThoiDiem);
                    cmd.Parameters.AddWithValue("ThoiDiemCuoi", ngayKetThuc);
                }
                DataTable dtDaCoGiaoDich = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dtDaCoGiaoDich);
                return dtDaCoGiaoDich;
            }
            catch (Exception ex)
            {
                string message = string.Format("Lỗi [{0}] ở \n {1}", ex.Message, ex.StackTrace.Substring(0, ex.StackTrace.IndexOf("\n")));
                throw new CustomException(message);
                return null;
            }
        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            DateTime ngayBatDau = dtNgayBatDau.DateTime;
            DateTime ngayKetThuc = dtNgayKetThuc.DateTime;
            if (!(FrmThamSoBaoCao.CheckKyBaoCaoVaThoiDiemKhoaSo(dtNgayBatDau, dtNgayKetThuc))) return;
            ThoiDiemKhoaSo thoiDiemKhoaSoGanNhat = DanhMucThoiDiemKhoaSo.Instance.GetThoiDiemKhoaSoGanNhat(ngayKetThuc);
            Hashtable hashSLDat = new Hashtable();

            BasicForms.FrmProgressBar.StartShowProgress();
            SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
            try
            {
                con.Open();
                SqlCommand cmd = con.CreateCommand(); cmd.CommandTimeout = Config.TimeOut;

                //Buil Kho condition
                int soLuongKho = 0;
                string khoCondition = "ID IN (";
                foreach (DataRow row in dsThongKeNhapXuatTon.Kho.Rows)
                {
                    if (row["Choose"] is bool && (bool)row["Choose"])
                    {
                        soLuongKho++;
                        khoCondition += string.Format("CONVERT('{0}', System.Guid), ", (Guid)row["ID"]);
                    }
                }
                if (khoCondition.EndsWith(", "))
                    khoCondition = khoCondition.Substring(0, khoCondition.Length - 2) + ")";
                else khoCondition = "1 = 0";

                DanhMucKho listKho = DanhMucKho.Filter(khoCondition);

                //Khởi tạo các cột động dựa vào số kho được chọn
                InitGridColumns(listKho);

                //Build VatTuHangHoa condition
                string vatTuHangHoaCondition = "";
                if (chkShowHangDaCoGiaoDich.Checked) //Nếu lọc hàng đã giao dịch thì để VatTuHangHoaID
                    vatTuHangHoaCondition = "VatTuHangHoaID IN (";
                else //Nếu load tất hàng từ danh mục thì cột VatTuHangHoaID chuyển thành ID
                    vatTuHangHoaCondition = "ID IN (";

                foreach (DataRow row in dsThongKeNhapXuatTon.VatTuHangHoa.Rows)
                {
                    if (row["Choose"] is bool && (bool)row["Choose"])
                    {
                        vatTuHangHoaCondition += string.Format("CONVERT('{0}', System.Guid), ", (Guid)row["ID"]);
                        try
                        {
                            hashSLDat.Add((Guid)row["ID"], (decimal)row["SoLuongDat"]);
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
                if (vatTuHangHoaCondition.EndsWith(", "))
                    vatTuHangHoaCondition = vatTuHangHoaCondition.Substring(0, vatTuHangHoaCondition.Length - 2) + ")";
                else vatTuHangHoaCondition = "1 = 0";

                DataTable dtDaCoGiaoDich = new DataTable();
                //Nếu option chỉ chon những hàng đã giao dịch thì chỉ get những hàng đã có giao dịch
                if (chkShowHangDaCoGiaoDich.Checked)
                    dtDaCoGiaoDich = GetHangDaCoGiaoDich(cmd, Guid.Empty, ngayKetThuc);  //Lấy tất các kho
                else //Nếu không thì lấy toàn bộ danh mục
                    dtDaCoGiaoDich = DanhMucVatTuHangHoa.Instance.DataTable;

                dtDaCoGiaoDich.DefaultView.RowFilter = vatTuHangHoaCondition;
                dtDaCoGiaoDich = dtDaCoGiaoDich.DefaultView.ToTable();

                dsThongKeNhapXuatTon.LietKeToanBoCacKho.Clear();

                int count = 0;
                foreach (DataRow row in dtDaCoGiaoDich.Rows)
                {
                    BasicForms.FrmProgressBar.Status = string.Format("Đang xử lý {0}/{1}", count, dtDaCoGiaoDich.Rows.Count);
                    count++;

                    Guid vatTuHangHoaID;
                    if (chkShowHangDaCoGiaoDich.Checked)
                        vatTuHangHoaID = (Guid)row["VatTuHangHoaID"];
                    else
                        vatTuHangHoaID = (Guid)row["ID"];

                    VatTuHangHoa vatTuHangHoa = DanhMucVatTuHangHoa.Instance.GetByID(vatTuHangHoaID);
                    DataRow addedRow = dsThongKeNhapXuatTon.LietKeToanBoCacKho.NewRow();  //chứa thông tin chung về hàng hóa

                    addedRow["Ma"] = vatTuHangHoa.Ma;
                    addedRow["Ten"] = vatTuHangHoa.Ten;
                    addedRow["GiaBia"] = vatTuHangHoa.GiaBia;
                    if (colSLDat.Visible && hashSLDat.Count > 0 && row["VatTuHangHoaID"] is Guid)
                    {
                        decimal valueDat = (decimal)hashSLDat[(Guid)row["VatTuHangHoaID"]];
                        addedRow["SoLuongDat"] = valueDat;
                    }

                    //Tính tồn từng kho một. Hỗ trợ tối đa 15 kho
                    foreach (Kho kho in listKho)
                    {
                        TonKho tonKho = TonKho.CalculateTonTuThoiDiemKhoaSoGanNhatDenThoiDiemNhapVaoTheoKho(cmd, ngayKetThuc, kho.ID, vatTuHangHoaID);
                        if (chkShowHangDaCoGiaoDich.Checked)
                        {
                            if (tonKho.SoLuong != 0)
                            {
                                #region Detect đưa số liệu vào kho nào

                                switch (kho.STT)
                                {
                                    case 1:
                                        addedRow["Kho1"] = tonKho.SoLuong;
                                        break;
                                    case 2:
                                        addedRow["Kho2"] = tonKho.SoLuong;
                                        break;
                                    case 3:
                                        addedRow["Kho3"] = tonKho.SoLuong;
                                        break;
                                    case 4:
                                        addedRow["Kho4"] = tonKho.SoLuong;
                                        break;
                                    case 5:
                                        addedRow["Kho5"] = tonKho.SoLuong;
                                        break;
                                    case 6:
                                        addedRow["Kho6"] = tonKho.SoLuong;
                                        break;
                                    case 7:
                                        addedRow["Kho7"] = tonKho.SoLuong;
                                        break;
                                    case 8:
                                        addedRow["Kho8"] = tonKho.SoLuong;
                                        break;
                                    case 9:
                                        addedRow["Kho9"] = tonKho.SoLuong;
                                        break;
                                    case 10:
                                        addedRow["Kho10"] = tonKho.SoLuong;
                                        break;
                                    case 11:
                                        addedRow["Kho11"] = tonKho.SoLuong;
                                        break;
                                    case 12:
                                        addedRow["Kho12"] = tonKho.SoLuong;
                                        break;
                                    case 13:
                                        addedRow["Kho13"] = tonKho.SoLuong;
                                        break;
                                    case 14:
                                        addedRow["Kho14"] = tonKho.SoLuong;
                                        break;
                                    case 15:
                                        addedRow["Kho15"] = tonKho.SoLuong;
                                        break;
                                    default:
                                        break;
                                }

                                #endregion
                            }
                        }
                        else
                        {
                            #region Detect đưa số liệu vào kho nào

                            switch (kho.STT)
                            {
                                case 1:
                                    addedRow["Kho1"] = tonKho.SoLuong;
                                    break;
                                case 2:
                                    addedRow["Kho2"] = tonKho.SoLuong;
                                    break;
                                case 3:
                                    addedRow["Kho3"] = tonKho.SoLuong;
                                    break;
                                case 4:
                                    addedRow["Kho4"] = tonKho.SoLuong;
                                    break;
                                case 5:
                                    addedRow["Kho5"] = tonKho.SoLuong;
                                    break;
                                case 6:
                                    addedRow["Kho6"] = tonKho.SoLuong;
                                    break;
                                case 7:
                                    addedRow["Kho7"] = tonKho.SoLuong;
                                    break;
                                case 8:
                                    addedRow["Kho8"] = tonKho.SoLuong;
                                    break;
                                case 9:
                                    addedRow["Kho9"] = tonKho.SoLuong;
                                    break;
                                case 10:
                                    addedRow["Kho10"] = tonKho.SoLuong;
                                    break;
                                case 11:
                                    addedRow["Kho11"] = tonKho.SoLuong;
                                    break;
                                case 12:
                                    addedRow["Kho12"] = tonKho.SoLuong;
                                    break;
                                case 13:
                                    addedRow["Kho13"] = tonKho.SoLuong;
                                    break;
                                case 14:
                                    addedRow["Kho14"] = tonKho.SoLuong;
                                    break;
                                case 15:
                                    addedRow["Kho15"] = tonKho.SoLuong;
                                    break;
                                default:
                                    break;
                            }

                            #endregion
                        }
                    }

                    //Tổng tồn các kho, nếu xem tất các kho
                    if (listKho.Count == DanhMucKho.Instance.DataTable.Rows.Count)
                    {
                        TonKho tonToanBo = TonKho.CalculateTongTonTuThoiDiemKhoaSoGanNhatDenThoiDiemNhapVao(cmd, ngayKetThuc, vatTuHangHoaID);
                        addedRow["TongTon"] = tonToanBo.SoLuong;
                    }

                    //Add giá trị tính được vào bảng 
                    dsThongKeNhapXuatTon.LietKeToanBoCacKho.Rows.Add(addedRow);
                }

                gridControl.DataSource = dsThongKeNhapXuatTon.LietKeToanBoCacKho;
                FormatNumberInGridView(gridView);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                FormatNumberInGridView(gridViewDsVatTuHangHoa);
                con.Close();
                con = null;
                BasicForms.FrmProgressBar.FinishShowProgress();
            }
        }

        private void btnPreview_Click(object sender, EventArgs e)
        {
            PrintWithHeaderAndFooter(false, gridControl, true, true, "Thống kê số lượng tồn - liệt kê theo từng kho", "", "", "", "");
        }

        private void cmbKyBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                FrmThamSoBaoCao.ThietLapKhoangThoiGianBaoCao(cmbKyBaoCao.Text, cmbKyBaoCao, dtNgayBatDau, dtNgayKetThuc);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void chkShowHangDaCoGiaoDich_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void btnCreateHangHoaAndReadFromExcelFile_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "Excel file|*.xlsx;*.xls";
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    BasicForms.FrmProgressBar.StartShowProgress();

                    string path = openFileDialog.FileName;
                    Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();
                    Excel.Workbook workBook = app.Workbooks.Open(path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t",
                                    false, false, 0, true, 1, 0);
                    Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;
                    Excel.Range range = workSheet.UsedRange;

                    //Biến lưu mã hàng và số lượng đặt
                    Hashtable hashInput = new Hashtable();

                    if (range.Columns.Count >= 2)
                    {
                        string vatTuHangHoaCondition = "Ma IN (";

                        for (int rowIndex = 2; rowIndex <= range.Rows.Count; rowIndex++)
                        {
                            string maHang = "";
                            decimal soLuongDat = 0;
                            VatTuHangHoa hanghoa = null;

                            try
                            {
                                maHang = (range.Cells[rowIndex, 2] as Excel.Range).Text.ToString().Trim();
                            }
                            catch (Exception ex)
                            { }
                            try
                            {
                                soLuongDat = Convert.ToDecimal((range.Cells[rowIndex, 3] as Excel.Range).Text.ToString().Trim());
                            }
                            catch (Exception ex)
                            { }

                            if (maHang == "")
                            {
                                MessageBox.Show(string.Format("Mã hàng ở dòng số {0} không hợp lệ", rowIndex - 2));
                                continue;
                            }

                            //Build điều kiện lọc vật tư hàng hóa theo mã
                            vatTuHangHoaCondition += string.Format("'{0}', ", maHang.Trim());

                            if (!hashInput.ContainsKey(maHang))
                                hashInput.Add(maHang, soLuongDat);
                        }

                        if (vatTuHangHoaCondition.EndsWith(", "))
                            vatTuHangHoaCondition = vatTuHangHoaCondition.Substring(0, vatTuHangHoaCondition.Length - 2) + ")";
                        else vatTuHangHoaCondition = "1 = 0";

                        DataTable dtVTHH = DanhMucVatTuHangHoa.Instance.DataTable;

                        dtVTHH.DefaultView.RowFilter = vatTuHangHoaCondition;
                        dtVTHH = dtVTHH.DefaultView.ToTable();

                        if (colSLDat.Visible)  //Nếu có hiện cột số lượng đặt dưới chọn hàng hóa --> mới cho đọc
                        {
                            try
                            {
                                dtVTHH.Columns.Add("SoLuongDat", typeof(decimal));
                            }
                            catch (Exception ex)
                            { }

                            foreach (DataRow row in dtVTHH.Rows)
                            {
                                if (row["Ma"] is string)
                                {
                                    decimal valueOfMa = (decimal)hashInput[(string)row["Ma"]];
                                    row["SoLuongDat"] = valueOfMa;
                                }
                            }
                        }

                        dsThongKeNhapXuatTon.VatTuHangHoa.Clear();
                        dsThongKeNhapXuatTon.VatTuHangHoa.Merge(dtVTHH);
                        chkChooseAllVatTuHangHoa.Checked = true;
                    }
                    workBook.Close(false, path, true);
                }
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            finally
            {
                BasicForms.FrmProgressBar.FinishShowProgress();
            }
        }

        private void btnSinhPhieuDatHang_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable dt = null;

                if (gridControl.DataSource is DataTable)
                    dt = (gridControl.DataSource as DataTable);
                else if (gridControl.DataSource is DataView)
                    dt = (gridControl.DataSource as DataView).ToTable();

                DataRow[] drs = dt.Select("SoLuongDat > 0");
                if (drs.Length <= 0)  //Không có hàng cần đặt
                {
                    FrmWarning.Show("Thông báo", "Không có hàng nào có số lượng đặt");
                    return;
                }
                else
                    dt = drs.CopyToDataTable();

                if (dt != null)
                {
                    FrmCongCuDatHang frm = new FrmCongCuDatHang();
                    frm.RequestCreateNewPhieuDatHang(dt, Guid.Empty);
                }
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }

        }

    }
}
